1 module unde.games.dizzy.omega.animations.ground_garden;
2 
3 import derelict.opengl3.gl;
4 import std.conv;
5 import std.format;
6 import std.math;
7 import std.stdio;
8 import unde.games.collision_detector;
9 import unde.games.dizzy.omega.dizzy;
10 import unde.games.dizzy.omega.main;
11 import unde.games.object;
12 import unde.games.renderer;
13 import unde.global_state;
14 
15 class GroundGarden:StaticGameObject
16 {
17     this(MainGameObject root)
18     {
19         frame = -1;
20         models["ground-garden"] = root.models["ground-garden"];
21         models["ground-garden-1"] = root.models["ground-garden-1"];
22         models["ground-garden-2"] = root.models["ground-garden-2"];
23         models["ground-garden-3"] = root.models["ground-garden-3"];
24 
25         super(root);
26     }
27 
28     override void draw(GlobalState gs)
29     {
30         DizzyOmega dz = cast(DizzyOmega) root;
31 
32         if (abs(root.scrx - 330.0) > 35.0 || root.scry != 0)
33             return;
34 
35         glPushMatrix();
36         if (frame < 0)
37         {
38             recursive_render(gs, models["ground-garden"]);
39         }
40         else
41         {
42             float f = root.frame - frame;
43             if (f < 100.0)
44             {
45                 recursive_render(gs, models["ground-garden"]);
46             }
47             else if (f < 200.0)
48             {
49                 recursive_render(gs, models["ground-garden-1"]);
50             }
51             else if (f < 300.0)
52             {
53                 recursive_render(gs, models["ground-garden-2"]);
54             }
55             else
56             {
57                 recursive_render(gs, models["ground-garden-3"]);
58             }
59         }
60         glPopMatrix();
61     }
62     
63     override bool tick(GlobalState gs)
64     {
65         DizzyOmega dz = cast(DizzyOmega) root;
66         
67         if (frame >= 0 && root.frame - frame == 300)
68         {
69             dz.collision_objects["solid"]["GroundGarden"] = null;
70             dz.collision_objects["solid"].remove("GroundGarden");
71             reset_collision_cache();
72         }
73 
74         return true;
75     }
76 
77     override void load(string[string] s)
78     {
79         string p = "groundgarden";
80         if (p in s)
81             frame = s[p].to!(long);
82         else
83             frame = -1;
84 
85         DizzyOmega dz = cast(DizzyOmega) root;
86         if (frame < 0 || root.frame - frame < 300)
87         {
88             dz.collision_objects["solid"]["GroundGarden"] =
89                 dz.collision_objects["temp-solid"]["GroundGarden"];
90             reset_collision_cache();
91         }
92         else
93         {
94             dz.collision_objects["solid"]["GroundGarden"] = null;
95             dz.collision_objects["solid"].remove("GroundGarden");
96             reset_collision_cache();
97         }
98     }
99 
100     override void save(ref string[string] s)
101     {
102         if (frame >= 0)
103         {
104             string p = "groundgarden";
105             s[p] = frame.to!(string);
106         }
107     }    
108 }